<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>商品详情</title>
    <script type="text/javascript" src="/js/jquery.min.js"></script>
    <!-- bootstrap -->
    <link rel="stylesheet" type="text/css" href="/bootstrap/css/bootstrap.min.css"/>
    <script type="text/javascript" src="/bootstrap/js/bootstrap.min.js">
    </script>
    <!-- layer -->
    <script type="text/javascript" src="/layer/layer.js"></script>
    <!-- common.js -->
    <script type="text/javascript" src="/js/common.js"></script>
</head>
<body>
<div class="panel panel-default">
    <div class="panel-heading">秒杀商品详情</div>
    <div class="panel-body">
        <span id="userTip"> 您还没有登录，请登录后再操作<br/></span>
        <span>没有收货地址的提示...</span>
    </div>
    <table class="table" id="goods">
        <tr>
            <td>商品名称</td>
            <td colspan="3" id="goodsName"></td>
        </tr>
        <tr>
            <td>商品图片</td>
            <td colspan="3">
                <img id="goodsImage" width="200" height="200" alt=""/>
            </td>
        </tr>
        <tr>
            <td>秒杀开始时间</td>
            <td id="startTime"></td>
            <td>
                <input type="hidden" id="remainSeconds"/>
                <span if="seckillStatus == 0">秒杀倒计时：
                    <span id="countDown" text="remainSeconds"></span>秒
                </span>
<!--                <span if="seckillStatus == 1">秒杀进行中</span>-->
<!--                <span if="seckillStatus == 2">秒杀已结束</span>-->
                <span id="seckillTip"></span>
            </td>
            <td>
                <div class="row">
                    <div class="form-inline">
                        <img id="kaptchaImage" onclick="refreshKaptcha()" width="140" height="30" style="display: none"/>
                        <input id="kaptcha" class="form-control" style="display: none"/>
                        <input type="hidden" name="goodsId" id="goodsId"/>
                        <button class="btn btn-primary btn-block" type="button" id="buyButton" onclick="getSeckillPath()">
                            立即秒杀
                        </button>
                    </div>
                </div>
            </td>
        </tr>
        <tr>
            <td>秒杀结束时间</td>
            <td id="endTime"></td>
        </tr>
        <tr>
            <td>商品原价</td>
            <td colspan="3" id="goodsPrice"></td>
        </tr>
        <tr>
            <td>秒杀价</td>
            <td colspan="3" id="seckillPrice"></td>
        </tr>
        <tr>
            <td>库存数量</td>
            <td colspan="3" id="stockCount"></td>
        </tr>
    </table>
</div>
</body>
<script>
    $(function () {
        getDetails();
    });

    /**
     * 刷新验证码
     */
    function refreshKaptcha() {
        $("#kaptchaImage").attr("src", "/kaptcha/seckill?goodsId=" + $("#goodsId").val() + "&time=" + new Date());
    }

    /**
     * 获取商品详情
     */
    function getDetails() {
        // 获取商品ID
        var goodsId = g_getQueryString("goodsId");

        $.ajax({
            url: '/goods/toDetail/' + goodsId,
            type: 'GET',
            success: function (data) {
                if (data.code === 200) {
                    // 如果请求成功则渲染当前页面的数据
                    render(data.data);
                } else {
                    if (data.code === 500213) {
                        // 用户未登录则重定向到登录页面
                        layer.msg(data.message, function () {
                            window.location.href = "/login/toLogin";
                        })
                    } else {
                        layer.msg(data.message);
                    }

                }
            },
            error: function () {
                layer.msg("商品详情获取失败");
            }
        });
    }

    /**
     * 渲染商品页面详情
     *
     * @param detail 商品详情返回对象
     */
    function render(detail) {
        // 获取对应的参数
        var user = detail.user;
        var goodsVO = detail.goodsVO;
        var seckillStatus = detail.seckillStatus;
        var remainSeconds = detail.remainSeconds;
        // 如果用户存在
        if (user) {
            // 隐藏未登录提示
            $("#userTip").hide();
        }
        // 赋值对应的商品数据
        $("#goodsId").val(goodsVO.id);
        $("#goodsName").text(goodsVO.goodsName);
        $("#goodsImage").attr("src", goodsVO.goodsImage);
        $("#startTime").text(goodsVO.startTime);
        $("#endTime").text(goodsVO.endTime);
        $("#remainSeconds").val(remainSeconds);
        $("#goodsPrice").text(goodsVO.goodsPrice);
        $("#seckillPrice").text(goodsVO.seckillPrice);
        $("#stockCount").text(goodsVO.stockCount);
        countDown();
    }

    function countDown() {
        var remainSeconds = $("#remainSeconds").val();
        var timeout;
        // 秒杀还没开始，倒计时
        if (remainSeconds > 0) {
            $("#seckillTip").html("秒杀未开始");
            $("#buyButton").attr("disabled", true);
            timeout = setTimeout(function () {
                $("#countDown").text(remainSeconds - 1);
                $("#remainSeconds").val(remainSeconds - 1);
                countDown();
            }, 1000);
        // 秒杀进行中
        } else if (remainSeconds == 0) {
            $("#buyButton").attr("disabled", false);
            if (timeout) {
                clearTimeout(timeout);
            }
            $("#seckillTip").html("秒杀进行中");
            // 获取验证码
            refreshKaptcha();
            // 显示验证码图片和验证码输入框
            $("#kaptchaImage").show();
            $("#kaptcha").show();
        // 秒杀已经结束
        } else {
            $("#buyButton").attr("disabled", true);
            $("#seckillTip").html("秒杀已经结束");
            // 隐藏验证码图片和验证码输入框
            $("#kaptchaImage").hide();
            $("#kaptcha").hide();
        }
    }

    /**
     * 获取秒杀地址
     */
    function getSeckillPath() {
        // 获取当前商品ID
        var goodsId = $("#goodsId").val();
        // 验证码值
        var kaptcha = $("#kaptcha").val();
        // 加载动画
        g_showLoading();
        $.ajax({
            url: "/seckill/path",
            method: "GET",
            data: {
                goodsId: goodsId,
                kaptcha: kaptcha
            },
            success: function (data) {
                if (data.code === 200) {
                    // 如果返回状态码为200则说明返回了接口秒杀的地址
                    var path = data.data;
                    // 获取到地址后再执行秒杀操作
                    doSeckill(path);
                } else {
                    if (data.code === 500213) {
                        // 用户未登录则重定向到登录页面
                        layer.msg(data.message, function () {
                            window.location.href = "/login/toLogin";
                        })
                    } else {
                        layer.msg(data.message);
                    }
                }
            },
            error: function () {
                layer.msg("获取秒杀地址失败");
            }
        })
    }

    /**
     * 秒杀接口
     */
    function doSeckill(path) {
        $.ajax({
            url: '/seckill/' + path + '/doSeckill',
            method: 'POST',
            data: {
                // 秒杀的商品Id
                goodsId: $("#goodsId").val(),
            },
            success: function (data) {
                if (data.code === 200) {
                    console.log("开始查询秒杀结果")
                    getResult($("#goodsId").val());
                } else {
                    if (data.code === 500213) {
                        // 用户未登录则重定向到登录页面
                        layer.msg(data.message, function () {
                            window.location.href = "/login/toLogin";
                        })
                    } else {
                        layer.msg(data.message);
                    }
                }
            },
            error: function (data) {
                layer.msg("秒杀失败");
            }
        })
    }

    /**
     * 查询秒杀结果
     *
     * @param goodsId 商品ID
     */
    function getResult(goodsId) {
        // 展示加载框
        g_showLoading();
        $.ajax({
            url: '/seckill/result',
            method: 'GET',
            data: {
                goodsId: goodsId,
            },
            success: function (data) {
                if (data.code === 200) {
                    const result = data.data;
                    // 输出秒杀结果
                    if (result < 0) {
                        layer.msg("秒杀失败");
                    } else if (result === 0) {
                        // 轮询查询秒杀结果
                        setTimeout(function () {
                            getResult(goodsId);
                        }, 500);
                    } else {
                        layer.confirm("恭喜你，秒杀成功！是否前往查看订单！", {btn: ["点击前往", "稍后查看"]},
                            // 点击前往方法
                            function () {
                                // 查询成功时，返回结果就是订单ID
                                window.location.href = "/produce/orderDetail.htm?orderId=" + result;
                            },
                            // 关闭询问框
                            function () { layer.close(); });
                    }
                } else {
                    if (data.code === 500213) {
                        // 用户未登录则重定向到登录页面
                        layer.msg(data.message, function () {
                            window.location.href = "/login/toLogin";
                        })
                    } else {
                        layer.msg(data.message);
                    }
                }
            },
            error: function () {
                layer.msg("系统出错，秒杀失败");
            }
        })
    }

</script>
</html>